/**
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package us.levk.remote.drmaa.common.api;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;

import org.ggf.drmaa.DrmaaException;
import org.ggf.drmaa.FileTransferMode;
import org.ggf.drmaa.PartialTimestamp;

/**
 * @author levk
 *
 */
public interface RemoteTemplate extends Serializable {

  void setRemoteCommand (UUID template, String remoteCommand) throws DrmaaException;
  String getRemoteCommand (UUID template) throws DrmaaException;
  void setArgs (UUID template, List<?> args) throws DrmaaException;
  List<?> getArgs (UUID template) throws DrmaaException;
  void setJobSubmissionState (UUID template, int state) throws DrmaaException;
  int getJobSubmissionState (UUID template) throws DrmaaException;
  void setJobEnvironment (UUID template, Map<?, ?> env) throws DrmaaException;
  Map<?, ?> getJobEnvironment (UUID template) throws DrmaaException;
  void setWorkingDirectory (UUID template, String wd) throws DrmaaException;
  String getWorkingDirectory (UUID template) throws DrmaaException;
  void setJobCategory (UUID template, String category) throws DrmaaException;
  String getJobCategory (UUID template) throws DrmaaException;
  void setNativeSpecification (UUID template, String spec) throws DrmaaException;
  String getNativeSpecification (UUID template) throws DrmaaException;
  void setEmail (UUID template, Set<?> email) throws DrmaaException;
  Set<?> getEmail (UUID template) throws DrmaaException;
  void setBlockEmail (UUID template, boolean blockEmail) throws DrmaaException;
  boolean getBlockEmail (UUID template) throws DrmaaException;
  void setStartTime (UUID template, PartialTimestamp startTime) throws DrmaaException;
  PartialTimestamp getStartTime (UUID template) throws DrmaaException;
  void setJobName (UUID template, String name) throws DrmaaException;
  String getJobName (UUID template) throws DrmaaException;
  void setInputPath (UUID template, String inputPath) throws DrmaaException;
  String getInputPath (UUID template) throws DrmaaException;
  void setOutputPath (UUID template, String outputPath) throws DrmaaException;
  String getOutputPath (UUID template) throws DrmaaException;
  void setErrorPath (UUID template, String errorPath) throws DrmaaException;
  String getErrorPath (UUID template) throws DrmaaException;
  void setJoinFiles (UUID template, boolean join) throws DrmaaException;
  boolean getJoinFiles (UUID template) throws DrmaaException;
  void setTransferFiles (UUID template, FileTransferMode mode) throws DrmaaException;
  FileTransferMode getTransferFiles (UUID template) throws DrmaaException;
  void setDeadlineTime (UUID template, PartialTimestamp deadline) throws DrmaaException;
  PartialTimestamp getDeadlineTime (UUID template) throws DrmaaException;
  void setHardWallclockLimit (UUID template, long hardWallclockLimit) throws DrmaaException;
  long getHardWallclockLimit (UUID template) throws DrmaaException;
  void setSoftWallclockLimit (UUID template, long softWallclockLimit) throws DrmaaException;
  long getSoftWallclockLimit (UUID template) throws DrmaaException;
  void setHardRunDurationLimit (UUID template, long hardRunLimit) throws DrmaaException;
  long getHardRunDurationLimit (UUID template) throws DrmaaException;
  void setSoftRunDurationLimit (UUID template, long softRunLimit) throws DrmaaException;
  long getSoftRunDurationLimit (UUID template) throws DrmaaException;
  Set<?> getAttributeName (UUID template) throws DrmaaException;
}
